home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2004 April / Gamestar_61_2004-04_dvdb.iso / DVDStar / Editace / hltp.exe / {app} / Applications / QuArK / quarkpy / mapselection.py < prev    next >
Text File  |  2004-01-05  |  8KB  |  214 lines

  1. """   QuArK  -  Quake Army Knife
  2.  
  3. The map editor's "Selection" menu (to be extended by plug-ins)
  4. """
  5. #
  6. # Copyright (C) 1996-99 Armin Rigo and the QuArK community
  7. # THIS FILE IS PROTECTED BY THE GNU GENERAL PUBLIC LICENCE
  8. # FOUND IN FILE "COPYING.TXT"
  9. #
  10.  
  11. #$Header: /cvsroot/quark/runtime/quarkpy/mapselection.py,v 1.13 2003/03/27 08:56:28 cdunde Exp $
  12.  
  13.  
  14.  
  15. import quarkx
  16. import qmenu
  17. import mapmenus
  18. from maputils import *
  19.  
  20. def getEditorSelection(editor=None):
  21.     if editor is None:
  22.         editor = mapeditor(SS_MAP)
  23.     if editor is None:
  24.         return None, None
  25.     sel = editor.layout.explorer.uniquesel
  26.     return editor, sel
  27.     
  28.  
  29. def EscClick(m):
  30.     editor = mapeditor(SS_MAP)
  31.     if editor is None: return
  32.     #if editor.layout.mpp.n:
  33.         #editor.layout.mpp.viewpage(0)
  34.     else:
  35.         editor.layout.mpp.viewpage(0)
  36.         editor.layout.explorer.uniquesel = None
  37.     delAttr(editor,'frozenselection')
  38.  
  39. def UnfreezeClick(m):
  40.     editor = mapeditor(SS_MAP)
  41.     delAttr(editor, 'frozenselection')
  42.  
  43. def FreezeClick(m):
  44.     editor = mapeditor(SS_MAP)
  45.     editor.frozenselection = 1
  46.     
  47.  
  48. same = quarkx.setupsubset(SS_GENERAL,"HotKeys")['Same Type']
  49. collapse = quarkx.setupsubset(SS_GENERAL,"HotKeys")['Collapse Tree']
  50.  
  51. def parentClick(m,editor=None):
  52.     editor, sel = getEditorSelection(editor)
  53.     if sel is None: return
  54.     parent = sel.treeparent
  55.     if parent.name!="worldspawn:b":
  56.         explorer = editor.layout.explorer
  57.         explorer.uniquesel = parent
  58.         if quarkx.keydown(collapse)!=1:
  59.             #
  60.             # Rigamarole to expand the treeview
  61.             #
  62.             Spec1 = qmenu.item("", mapmenus.set_mpp_page, "")
  63.             Spec1.page = 0
  64.             mapmenus.set_mpp_page(Spec1) 
  65.             explorer.expand(parent,0)
  66.  
  67.  
  68. def childClick(m, editor=None):
  69.     editor, sel = getEditorSelection(editor)
  70.     if sel is None:
  71.         if editor is None: return
  72.         sel = editor.Root
  73.     if sel.subitems == []: return
  74.     explorer = editor.layout.explorer
  75.     explorer.uniquesel = sel.subitems[0]
  76.     #
  77.     # Rigamarole to expand the treeview
  78.     #
  79.     Spec1 = qmenu.item("", mapmenus.set_mpp_page, "")
  80.     Spec1.page = 0
  81.     mapmenus.set_mpp_page(Spec1) 
  82.     explorer.expand(sel)
  83.  
  84. def getNext(obj):
  85.     parent = obj.treeparent
  86.     if parent is None:
  87.         return
  88.     next = obj.nextingroup()
  89.     if next is None:
  90.         next=parent.subitems[0]
  91.     return next
  92.     
  93. def getPrevious(obj):
  94.     parent=obj.treeparent
  95.     if parent is None: return
  96.     index = parent.subitems.index(obj)
  97.     if index>0:
  98.         prev = parent.subitem(index-1)
  99.     else:
  100.         prev = parent.subitem(len(parent.subitems)-1)
  101.     return prev
  102.     
  103. def nextClick(m,editor=None):
  104.     editor, sel = getEditorSelection(editor)
  105.     if sel is None: return
  106.     successor = m.succ(sel)
  107.     if successor is None:
  108.         return
  109.     same = quarkx.setupsubset(SS_GENERAL,"HotKeys")['Same Type']
  110.  
  111.     if quarkx.keydown(same)==1:
  112.         while successor.type!=sel.type:
  113.             successor = m.succ(successor)
  114.     editor.layout.explorer.uniquesel=successor
  115.  
  116.  
  117. same = quarkx.setupsubset(SS_GENERAL,"HotKeys")['Same Type']
  118. collapse = quarkx.setupsubset(SS_GENERAL,"HotKeys")['Collapse Tree']
  119. removeItem = qmenu.item("&Cancel Selections", EscClick, "|Cancel Selections:\n\n'Cancel Selections', or by pressing its HotKey, will unselect all objects that are currently selected, even frozen ones, and you are sent back to the 1st page, the treeview, if you are not already there.|intro.mapeditor.menu.html#selectionmenu")
  120.  
  121. parentItem = qmenu.item("Select &Parent", parentClick, "|Select Parent:\n\n  The Parent is collapsed in the treeview unless '%s' is depressed.|intro.mapeditor.menu.html#selectionmenu"%collapse)
  122.  
  123. childItem = qmenu.item("Select &Child", childClick, "|Select Child:\n\nSelects first child.|intro.mapeditor.menu.html#selectionmenu")
  124.  
  125. nextItem = qmenu.item("Select &Next", nextClick, "|Select Next:\n\nThis selects the next item in the group.\n\nCycling - Depress '%s' to constrain your selection to the next item of the same type.|intro.mapeditor.menu.html#selectionmenu"%same)
  126.  
  127. prevItem = qmenu.item("Select Pre&vious", nextClick, "|Select Previous:\n\nSelects the previous item in the group.\n\nCycling - Depress '%s' to constrain your selection to the next item of the same type.|intro.mapeditor.menu.html#selectionmenu"%same)
  128. nextItem.succ = getNext
  129. prevItem.succ = getPrevious
  130.  
  131. freezetext = "|Freeze/Unfreeze Selection:\n\nIf the selection is 'frozen', then clicking in the map view will not change it unless the ALT key is depressed, which also freezes to the new selection.\n\nOther methods of changing the selection, such as the arrow keys in the treeview, will also freeze to the new selection, but clearing with ESC or choosing the menu 'Cancel Selections' function will unfreeze as well as clear it.|intro.mapeditor.menu.html#selectionmenu"
  132.  
  133. unfreezeItem = qmenu.item("Unfreeze Selection", UnfreezeClick, freezetext)
  134.  
  135. freezeItem = qmenu.item("Freeze Selection", FreezeClick, freezetext)
  136.  
  137. #
  138. # Global variables to update from plug-ins.
  139. #
  140.  
  141. items = [removeItem, parentItem, childItem, nextItem, prevItem, freezeItem, unfreezeItem]
  142. shortcuts = {}
  143.  
  144. def onclick(menu):
  145.     editor=mapeditor()
  146.     removeItem.state=parentItem.state=childItem.state=qmenu.disabled
  147.     nextItem.state=prevItem.state=freezeItem.state=unfreezeItem.state=qmenu.disabled
  148.     if editor is not None:
  149.         uniquesel = editor.layout.explorer.uniquesel 
  150.         if uniquesel is not None:
  151.             removeItem.state=nextItem.state=prevItem.state=qmenu.normal
  152.             if len(uniquesel.subitems)>0:
  153.                 childItem.state = qmenu.normal
  154.             if uniquesel.treeparent is not None:
  155.                 parentItem.state=qmenu.normal
  156.             if getAttr(editor,'frozenselection') is None:
  157.                 freezeItem.state=qmenu.normal
  158.             else:
  159.                 unfreezeItem.state=qmenu.normal
  160.  
  161. def SelectionMenu():
  162.     "The Selection menu, with its shortcuts."
  163.  
  164.     MapHotKeyList("Cancel Selections", removeItem, shortcuts)
  165.     MapHotKeyList("Select Parent", parentItem, shortcuts)
  166.     MapHotKeyList("Select Child", childItem, shortcuts)
  167.     MapHotKeyList("Select Next", nextItem, shortcuts)
  168.     MapHotKeyList("Select Previous", prevItem, shortcuts)
  169.     MapHotKeyList("Freeze Selection", freezeItem, shortcuts)
  170.     MapHotKeyList("Unfreeze Selection", unfreezeItem, shortcuts)
  171.  
  172.     return qmenu.popup("Selectio&n", items, onclick), shortcuts
  173.  
  174.  
  175. # $Log: mapselection.py,v $
  176. # Revision 1.13  2003/03/27 08:56:28  cdunde
  177. # Update by tiglari to fix runtime and other errors.
  178. #
  179. # Revision 1.12  2003/03/26 03:21:31  cdunde
  180. # To fix runtime error and gray out all menu items if no selection is made.
  181. #
  182. # Revision 1.11  2003/03/25 10:16:52  tiglari
  183. # re-fix enablement bugs
  184. #
  185. # Revision 1.10  2003/03/25 09:56:49  cdunde
  186. # To correct conflict and add infobase links and update
  187. #
  188. # Revision 1.9  2003/03/25 08:28:27  tiglari
  189. # fix enabler and select parent logic
  190. #
  191. # Revision 1.8  2003/02/09 06:11:01  cdunde
  192. # Discription update and HotKey name change
  193. #
  194. # Revision 1.7  2003/02/08 07:37:25  cdunde
  195. # To reduce Cancel selection to a one click function
  196. #
  197. # Revision 1.5  2002/05/13 10:35:57  tiglari
  198. # support frozen selections (don't change until another frozen selection is made,
  199. # or they are cancelled with ESC or unfreeze selection)
  200. #
  201. # Revision 1.4  2001/05/04 06:36:53  tiglari
  202. # Accelerators added to selection menu
  203. #
  204. # Revision 1.3  2001/05/03 05:35:17  tiglari
  205. # fixed selection menu crash bug (failure to test for 'is not None')
  206. #
  207. # Revision 1.2  2001/04/30 10:57:42  tiglari
  208. # added child, key mods for next/prev of same type, treeview control
  209. #
  210. # Revision 1.1  2001/04/28 02:23:12  tiglari
  211. # initial commit
  212. #
  213. #
  214. #